package com.mall.system.service;

import com.mall.common.constant.UserConstants;
import com.mall.common.core.text.Convert;
import com.mall.common.exception.BusinessException;
import com.mall.common.utils.StringUtils;
import com.mall.system.domain.entity.SysPost;
import com.mall.system.mapper.SysPostMapper;
import com.mall.system.mapper.SysUserPostMapper;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 岗位信息 服务层处理
 * Created by zhonglin on 2020/4/8.
 */
@Service
public class SysPostService {

  @Autowired
  private SysPostMapper postMapper;

  @Autowired
  private SysUserPostMapper userPostMapper;

  /**
   * 查询岗位信息集合
   *
   * @param post 岗位信息
   *
   * @return 岗位信息集合
   */
  public List<SysPost> selectPostList(SysPost post) {

    return postMapper.selectPostList(post);
  }

  /**
   * 查询所有岗位
   *
   * @return 岗位列表
   */
  public List<SysPost> selectPostAll() {

    return postMapper.selectPostAll();
  }

  /**
   * 根据用户ID查询岗位
   *
   * @param userId 用户ID
   *
   * @return 岗位列表
   */
  public List<SysPost> selectPostsByUserId(Long userId) {

    List<SysPost> userPosts = postMapper.selectPostsByUserId(userId);
    List<SysPost> posts     = postMapper.selectPostAll();
    for (SysPost post : posts) {
      for (SysPost userRole : userPosts) {
        if (post.getPostId()
                .longValue() == userRole.getPostId()
                                        .longValue()) {
          post.setFlag(true);
          break;
        }
      }
    }
    return posts;
  }

  /**
   * 通过岗位ID查询岗位信息
   *
   * @param postId 岗位ID
   *
   * @return 角色对象信息
   */
  public SysPost selectPostById(Long postId) {

    return postMapper.selectPostById(postId);
  }

  /**
   * 批量删除岗位信息
   *
   * @param ids 需要删除的数据ID
   *
   * @throws Exception
   */
  public int deletePostByIds(String ids)
      throws BusinessException {

    Long[] postIds = Convert.toLongArray(ids);
    for (Long postId : postIds) {
      SysPost post = selectPostById(postId);
      if (countUserPostById(postId) > 0) {
        throw new BusinessException(String.format("%1$s已分配,不能删除", post.getPostName()));
      }
    }
    return postMapper.deletePostByIds(postIds);
  }

  /**
   * 新增保存岗位信息
   *
   * @param post 岗位信息
   *
   * @return 结果
   */
  public int insertPost(SysPost post) {

    return postMapper.insertPost(post);
  }

  /**
   * 修改保存岗位信息
   *
   * @param post 岗位信息
   *
   * @return 结果
   */
  public int updatePost(SysPost post) {

    return postMapper.updatePost(post);
  }

  /**
   * 通过岗位ID查询岗位使用数量
   *
   * @param postId 岗位ID
   *
   * @return 结果
   */
  public int countUserPostById(Long postId) {

    return userPostMapper.countUserPostById(postId);
  }

  /**
   * 校验岗位名称是否唯一
   *
   * @param post 岗位信息
   *
   * @return 结果
   */
  public String checkPostNameUnique(SysPost post) {

    Long    postId = StringUtils.isNull(post.getPostId())
        ? -1L
        : post.getPostId();
    SysPost info   = postMapper.checkPostNameUnique(post.getPostName());
    if (StringUtils.isNotNull(info) && info.getPostId()
                                           .longValue() != postId.longValue()) {
      return UserConstants.POST_NAME_NOT_UNIQUE;
    }
    return UserConstants.POST_NAME_UNIQUE;
  }

  /**
   * 校验岗位编码是否唯一
   *
   * @param post 岗位信息
   *
   * @return 结果
   */
  public String checkPostCodeUnique(SysPost post) {

    Long    postId = StringUtils.isNull(post.getPostId())
        ? -1L
        : post.getPostId();
    SysPost info   = postMapper.checkPostCodeUnique(post.getPostCode());
    if (StringUtils.isNotNull(info) && info.getPostId()
                                           .longValue() != postId.longValue()) {
      return UserConstants.POST_CODE_NOT_UNIQUE;
    }
    return UserConstants.POST_CODE_UNIQUE;
  }

}
